	.text

/* 从当前线程(current_thread)切换到下一个线程(next_thread)：
 * 1. 将 next_thread 设为 current_thread
 * 2. 将 next_thread 指针清零
 * 使用 eax 作为临时寄存器（它的值由调用者负责保存） */
	.globl thread_switch
thread_switch:
	# 此时，栈指针(stack pointer)指向当前线程的堆栈
	pushal  # 保存所有通用寄存器的状态到当前线程的堆栈
	# 切换到下一个线程
	movl next_thread, %eax    # 将 next_thread 的地址加载到 eax
	movl %eax, current_thread # 将 eax 的值赋给 current_thread（更新当前线程）
	movl $0, next_thread      # 将 next_thread 指针清零（防止重复切换）
	movl (%eax), %esp         # 从 next_thread 结构体中加载其堆栈地址到 esp（切换堆栈）
	popal                     # 从新线程的堆栈中恢复所有通用寄存器的状态
	ret				# 从堆栈中弹出返回地址，完成切换